(function() {

	if (typeof Function.prototype.bind != 'function') {
		Function.prototype.bind = function bind(context) {
			var fn = this, bindArgs = Array.prototype.slice.call(arguments, 1);
			return function() {
				return fn.apply(context, bindArgs.concat(Array.prototype.slice.call(arguments)));
			};
		};
	}

	Function.prototype.delay = function delay(timeout) {
		var __method = this, args = Array.prototype.slice.call(arguments, 1);
		timeout = timeout * 1000
		return window.setTimeout(function() {
			return __method.apply(__method, args);
		}, timeout);
	};

	Function.prototype.wrap = function wrap(wrapper) {
		var method = this;
		return function() {
			return wrapper.apply(this, [method.bind(this)].concat(Array.prototype.slice.call(arguments)));
		};
	};

	var bind = null,
		delay = null,
		wrap = null;

})();